﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Script.Serialization;
using System.Collections;
using System.IO;
using System.Data;

namespace YTSK.Common
{
    class handleJSON
    {
        #region 反序列化对象
        /// <summary>
        /// 反序列化对象
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        public static Dictionary<string, object> Deserialize(string json)
        {
            var js = new JavaScriptSerializer();
            js.MaxJsonLength = Int32.MaxValue; //取得最大数值
            var obj= js.Deserialize< Dictionary<string, object>>(json);
            var dic = (Dictionary<string, object>)obj;
            return dic;
        }

        public static T Deserialize<T>(string json)
        {
            var js = new JavaScriptSerializer();
            js.MaxJsonLength = Int32.MaxValue; //取得最大数值
            return js.Deserialize<T>(json);
        }
        public static Model.ResultJson DeserializeResult(string json)
        {
            var result = new Model.ResultJson();
            var dic = Deserialize(json);
            result.result = dic["result"].ObjToInt();
            result.resultdetail = dic["resultdetail"].ObjToString();
            result.value = dic;
            if (result.result != 1)
            {
                if (result.resultdetail.IndexOf("登陆信息已经过期") > 0)
                { var f = new FrmKP.FrmLogin(); f.ShowDialog(); }
            }
            return result;
        }

        #endregion

        #region 序列化对象
        /// <summary>
        /// 序列化对象
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static string Serialize(object obj)
        {
            var js = new JavaScriptSerializer();
            js.RegisterConverters(new JavaScriptConverter[] { new DateTimeConverter() });
            js.MaxJsonLength = Int32.MaxValue; //取得最大数值
            return js.Serialize(obj);
        }
        #endregion

    }

    public class DateTimeConverter : JavaScriptConverter
    {



        public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
        {

            return new JavaScriptSerializer().ConvertToType(dictionary, type);

        }



        public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
        {

            if (!(obj is DateTime)) return null;
            return new CustomString(((DateTime)obj).ToString("yyyy-MM-dd"));
        }



        public override IEnumerable<Type> SupportedTypes
        {

            get
            {
                return new[] { typeof(DateTime) };
            }

        }


        private class CustomString : Uri, IDictionary<string, object>
        {
            public CustomString(string str)
                : base(str, UriKind.Relative)
            {

            }


            void IDictionary<string, object>.Add(string key, object value)
            {

                throw new NotImplementedException();

            }



            bool IDictionary<string, object>.ContainsKey(string key)
            {

                throw new NotImplementedException();

            }



            ICollection<string> IDictionary<string, object>.Keys
            {

                get
                {
                    throw new NotImplementedException();
                }

            }



            bool IDictionary<string, object>.Remove(string key)
            {

                throw new NotImplementedException();

            }


            bool IDictionary<string, object>.TryGetValue(string key, out object value)
            {

                throw new NotImplementedException();

            }



            ICollection<object> IDictionary<string, object>.Values
            {

                get
                {
                    throw new NotImplementedException();
                }

            }



            object IDictionary<string, object>.this[string key]
            {

                get
                {

                    throw new NotImplementedException();

                }

                set
                {

                    throw new NotImplementedException();

                }

            }



            void ICollection<KeyValuePair<string, object>>.Add(KeyValuePair<string, object> item)
            {

                throw new NotImplementedException();

            }



            void ICollection<KeyValuePair<string, object>>.Clear()
            {

                throw new NotImplementedException();

            }



            bool ICollection<KeyValuePair<string, object>>.Contains(KeyValuePair<string, object> item)
            {

                throw new NotImplementedException();

            }



            void ICollection<KeyValuePair<string, object>>.CopyTo(KeyValuePair<string, object>[] array, int arrayIndex)
            {

                throw new NotImplementedException();

            }



            int ICollection<KeyValuePair<string, object>>.Count
            {

                get
                {
                    throw new NotImplementedException();
                }

            }



            bool ICollection<KeyValuePair<string, object>>.IsReadOnly
            {

                get
                {
                    throw new NotImplementedException();
                }

            }



            bool ICollection<KeyValuePair<string, object>>.Remove(KeyValuePair<string, object> item)
            {

                throw new NotImplementedException();

            }



            IEnumerator<KeyValuePair<string, object>> IEnumerable<KeyValuePair<string, object>>.GetEnumerator()
            {
                throw new NotImplementedException();

            }



            IEnumerator IEnumerable.GetEnumerator()
            {
                throw new NotImplementedException();

            }

        }
    }

}
